/*******************************************************************************
 * Copyright (c) 2015, 2016 Bosch Software Innovations GmbH and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * and Eclipse Distribution License v1.0 which accompany this distribution.
 *   
 * The Eclipse Public License is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * The Eclipse Distribution License is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *   
 * Contributors:
 * Bosch Software Innovations GmbH - Please refer to git log
 *******************************************************************************/
package org.eclipse.vorto.codegen.protobuf.templates

import java.util.List
import org.eclipse.vorto.core.api.model.datatype.Entity
import org.eclipse.vorto.core.api.model.datatype.Property
import org.eclipse.vorto.plugin.generator.InvocationContext

class ProtobufEntityTemplate extends ProtobufTemplate<Entity> {

	override getContent(Entity element, InvocationContext context) {
		'''
		// Generated by Vorto from «element.namespace».«element.name»:«element.version»
		syntax = "proto3";
				
		package «element.namespace»;
				
		import "org/eclipse/vorto/meta.proto";
		
		«FOR reference : element.references»
		import "«reference.importedNamespace.toLowerCase.replace(".","/")».proto";
		«ENDFOR»
				
		«IF element.description != null»//«element.description»«ENDIF»
		message «element.name» {
			org.eclipse.vorto.Meta meta = 1;
			«generateMessageProperties(element.properties)»
			
		}
		'''
	}
	
	def generateMessageProperties(List<Property> properties) {
		'''
			«IF properties !== null»
				«var counter = 1»
				«FOR property : properties»
					«IF property.multiplicity»repeated «ENDIF»«type(property.type)» «property.name» = «counter++»; «IF property.description != null»//«property.description»«ENDIF»
				«ENDFOR»
			«ENDIF»
		'''
	}
	
}